package it.ap.sa.core.authentication.service;

import java.util.HashMap;
import java.util.List;

import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import org.springframework.web.context.support.WebApplicationContextUtils;

import it.ap.sa.acqua.auth.mapper.UserMapper;
import it.ap.sa.acqua.dao.impl.TUserDao;
import it.ap.sa.acqua.dao.model.TUser;

//import it.eng.tz.core.dao.impl.USessionInfoDao;

/**
 * @author Alessandro Paolillo
 */
@Component
public class SessionListener implements HttpSessionListener {
	
	private static final Logger logger = LoggerFactory.getLogger(SessionListener.class.getName());
	
//	@Autowired
//	private UserMapper userMapper;
//	
//	@Autowired
//	private TUserDao tUserDao;
	
	@Override
	public void sessionCreated(HttpSessionEvent arg0) {
		
		logger.info("sessionCreated");
//		if (userMapper!=null && userMapper.getUserMapper()!=null) {
//			
//			logger.info("UserMapper gia' caricato in sessione");
//		} else {
//			
//			logger.info("Inizio caricamento in memoria di userMapper");
//			userMapper = new UserMapper();
//			HashMap<String, TUser> hmUser = new HashMap<String,TUser>();
//			List<TUser> allUser = tUserDao.findAllUsers();
//			
//			for (TUser tUser : allUser) 
//				hmUser.put(tUser.getSsoId(), tUser);
//			
//			userMapper.setUserMapper(hmUser);
//			logger.info("Caricamento in memoria di userMapper completato");
//		}
	}
	
	/**
	 * Viene verificato se sul database esiste un record con i dati di sessione dell'utente. 
	 * La verifica, se esiste già il dato nel db, viene fatta attraverso l'id della sessione. 
	 * Se, l'informazione è presente cancello il record in quanto l'utente si è disconnesso dall'applicazione.
	 */
    @Override
    public void sessionDestroyed( HttpSessionEvent sessionEvent ) {
    	try {
    		HttpSession session = sessionEvent.getSession();
    		 
    		if (session != null && StringUtils.hasText(session.getId())) {
					
				ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(session.getServletContext());

			}else{
			   /**
			    * Caso in cui l'oggetto @HttpSession è null
			    * FIXME -- devo lanciare l'eccezione interrompendo l'esecuzione o procedere 
			    */
			   logger.warn("HttpSession è null.");
			}
		}catch(Exception e ){
			// FIXME -- devo lanciare l'eccezione interrompendo l'esecuzione o procedere 
			logger.error("sessionDestroyed >>> " + e, e);
		}
    }
}
